#include <bits/stdc++.h>
using namespace std;
typedef long long ll;

const int N = 1e6 + 10;
int n;

struct qmx{
	priority_queue<int> q, qq;
	void add(int x){ q.push(x); }
	void del(int x){ qq.push(x); }
	int gmx(){ 
		while(q.size() && qq.size() && q.top() == qq.top()){ qq.pop(); q.pop(); } 
		return q.size() ? q.top() : -1e9;
	}
} le, rl[N];
struct qmn{
	priority_queue<int> q, qq;
	void add(int x){ q.push(-x); }
	void del(int x){ qq.push(-x); }
	int gmn(){
		while(q.size() && qq.size() && q.top() == qq.top()){ qq.pop(); q.pop(); }
		return q.size() ? -q.top() : 1e9;
	}
} ri, lr[N];

struct node{
	int ans, le, ri;
} t[N*4];

void upd(int p, int l, int r, int x){
	if(l == r){
		t[p].le = rl[x].gmx();
		t[p].ri = lr[x].gmn();
		t[p].ans = t[p].ri - t[p].le;
	} else {
		int mid = l + r >> 1;
		if(x <= mid){
			upd(p<<1, l, mid, x);
		} else {
			upd(p<<1|1, mid+1, r, x);
		}
		t[p].le = max(t[p<<1].le, t[p<<1|1].le);
		t[p].ri = min(t[p<<1].ri, t[p<<1|1].ri);
		t[p].ans = min({t[p<<1].ans, t[p<<1|1].ans, t[p<<1|1].ri - t[p<<1].le});
	}
	// printf("%d %d %d %d %d\n", l, r, t[p].le, t[p].ri, t[p].ans);
}

int main(){
	freopen("stone.in", "r", stdin);
	freopen("stone.out", "w", stdout);
	for(int i = 0; i < N*4; ++ i){
		t[i].le = -1e9;
		t[i].ri = 1e9;
		t[i].ans = 2e9;
	}
	scanf("%d", &n);
	for(int i = 1; i <= n; ++ i){
		char s[5];
		int l, r;
		scanf("%s%d%d", s, &l, &r);
		if(s[0] == 'A'){
			le.add(l);
			ri.add(r);
			lr[l].add(r);
			rl[r].add(l);
		} else {
			le.del(l);
			ri.del(r);
			lr[l].del(r);
			rl[r].del(l);
		}
		upd(1, 1, 1000000, l);
		upd(1, 1, 1000000, r);
		// printf("upd %d %d\n", l, r);
		if(le.gmx() < ri.gmn()){
			printf("%d\n", lr[le.gmx()].gmn() - rl[ri.gmn()].gmx());
			// printf("%d\n", t[1].ans);
		} else {
			printf("%d\n", t[1].ans);
		}
	}
	return 0;
}